package com.dingreading.cloud.common.util.qyweixin;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dingreading.cloud.common.util.HttpUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * 企业微信api开发
 */
public class QyWeiXinUtil {

    private static final Logger logger = LoggerFactory.getLogger(QyWeiXinUtil.class);

    /**
     * 获取access_token
     * https://developer.work.weixin.qq.com/document/path/91039
     */
    public static AccessTokenDto getAccessToken(String corpid, String secret) {
        AccessTokenDto dto = null;
        try {
            String apiUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s";
            String url = String.format(apiUrl, corpid, secret);
            String result = HttpUtils.get(url);
            if (StringUtils.isNotBlank(result)) {
                dto = JSONObject.parseObject(result, AccessTokenDto.class);
                if (dto.getErrcode() == 0) {
                    return dto;
                } else {
                    logger.error("获取企业微信应用的accessToken失败！code：" + dto.getErrcode());
                    logger.error("获取企业微信应用的accessToken失败！msg：" + dto.getErrmsg());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return dto;
    }


    /**
     * 发送应用消息到用户
     * https://developer.work.weixin.qq.com/document/path/90236
     */
    public static void sendToUser(String accessToken, String agentid, String toUserid, String msg) {
        String apiUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + accessToken;

        JSONObject jsonObject = new JSONObject();
        // 企业应用的id
        jsonObject.put("agentid", agentid);
        // 	指定接收消息的成员，成员ID列表（多个接收者用‘|’分隔，最多支持1000个）。
        jsonObject.put("touser", toUserid);
        // 指定接收消息的部门，部门ID列表，多个接收者用‘|’分隔，最多支持100个。
//            jsonObject.put("toparty","16");
        // 消息类型，此时固定为：text
        jsonObject.put("msgtype", "markdown");
        // 消息内容，最长不超过2048个字节，超过将截断
        JSONObject contentObj = new JSONObject();
        contentObj.put("content", msg);
        jsonObject.put("markdown", contentObj);

        HttpUtils.post(apiUrl, jsonObject.toJSONString());
    }

    /**
     * 创建群聊
     * https://developer.work.weixin.qq.com/document/path/90245
     */
    public static void createChat(String accessToken, String name) {
        if (StringUtils.isBlank(accessToken)) {
            logger.info("获取企业微信调用接口凭证accessToken失败");
        } else {
            String apiUrl = "https://qyapi.weixin.qq.com/cgi-bin/appchat/create?access_token=" + accessToken;

            JSONArray array = new JSONArray();
            array.add("BaoYongZhi");
            array.add("ShiCaiShun");

            JSONObject jsonObject = new JSONObject();
            // 群聊名
            jsonObject.put("name", name);
            // 指定群主的id
            jsonObject.put("owner", "BaoYongZhi");
            // 群成员id列表
            jsonObject.put("userlist", array);

            HttpUtils.post(apiUrl, jsonObject.toJSONString());
        }
    }

    public static String createChat(String accessToken, String name, List<String> userIds) {
        if (StringUtils.isBlank(accessToken)) {
            logger.info("获取企业微信调用接口凭证accessToken失败");
        } else {
            String apiUrl = "https://qyapi.weixin.qq.com/cgi-bin/appchat/create?access_token=" + accessToken;

            JSONArray userlist = new JSONArray();
            userlist.addAll(userIds);
            userlist.add("BaoYongZhi");

            JSONObject jsonObject = new JSONObject();
            // 群聊名
            jsonObject.put("name", name);
            // 指定群主的id
            jsonObject.put("owner", "BaoYongZhi");
            // 群成员id列表
            jsonObject.put("userlist", userlist);

            String post = HttpUtils.post(apiUrl, jsonObject.toJSONString());
            return post;
        }
        return "";
    }

    /**
     * 发送应用消息到群聊
     * https://developer.work.weixin.qq.com/document/path/90248
     */
    public static void sendToChat(String accessToken, String chatid, String msg) {
        if (StringUtils.isBlank(accessToken)) {
            logger.info("获取企业微信调用接口凭证accessToken失败");
        } else {
            String apiUrl = "https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token=" + accessToken;

            JSONObject jsonObject = new JSONObject();
            // 企业应用的id
            jsonObject.put("chatid", chatid);
            // 消息类型，此时固定为：text
            jsonObject.put("msgtype", "markdown");
            // 消息内容，最长不超过2048个字节，超过将截断
            JSONObject contentObj = new JSONObject();
            contentObj.put("content", msg);
            jsonObject.put("markdown", contentObj);

            HttpUtils.post(apiUrl, jsonObject.toJSONString());
        }
    }

    /**
     * 获取群聊会话
     * https://developer.work.weixin.qq.com/document/path/98914
     */
    public static String getChat(String accessToken, String chatid) {
        if (StringUtils.isBlank(accessToken)) {
            logger.info("获取企业微信调用接口凭证accessToken失败");
        } else {
            String apiUrl = "https://qyapi.weixin.qq.com/cgi-bin/appchat/get?access_token=" + accessToken + "&chatid=" + chatid;
            String result = HttpUtils.get(apiUrl);
            return result;
        }
        return "";
    }

}
